#include "ofApp.h"

//--------------------------------------------------------------
void ofApp::setup(){

	ofBackground(255);
	ofSetOrientation(OF_ORIENTATION_90_RIGHT);

	synth.load("sounds/synth.mp3"); // compressed mp3 format.
	synth.setVolume(0.75);

	beats.load("sounds/1085.caf"); // uncompressed caf format.
	beats.setVolume(0.75);

	// in iOS, openFrameworks uses ofxiOSSoundPlayer to play sound.
	// ofxiOSSoundPlayer is a wrapper for AVSoundPlayer which uses AVFoundation to play sound.
	// you can use AVSoundPlayer directly using objective-c in the same way you use ofxiOSSoundPlayer,
	// and many of the function names are the same or similar.
	// the below code demonstrates how the AVSoundPlayer can be used inside your app.

	vocals = [[AVSoundPlayer alloc] init];
	[vocals loadWithFile:@"sounds/Violet.wav"]; // uncompressed wav format.
	[vocals volume:0.5];

	font.load("fonts/Sudbury_Basin_3D.ttf", 18);
}

//--------------------------------------------------------------
void ofApp::update(){
	//
}

//--------------------------------------------------------------
void ofApp::draw(){

	string tempStr;

	float sectionWidth = ofGetWidth() / 3.0f;

	// draw the background colors:
	ofSetHexColor(0xeeeeee);
	ofDrawRectangle(0, 0, sectionWidth, ofGetHeight());
	ofSetHexColor(0xffffff);
	ofDrawRectangle(sectionWidth, 0, sectionWidth, ofGetHeight());
	ofSetHexColor(0xdddddd);
	ofDrawRectangle(sectionWidth * 2, 0, sectionWidth, ofGetHeight());

	//---------------------------------- synth:
	if(synth.isPlaying()) {
		ofSetHexColor(0xFF0000);
	} else {
		ofSetHexColor(0x000000);
	}
	font.drawString("synth !!", 10,50);

	ofSetColor(0);
	tempStr = "click to play\nposition: " + ofToString(synth.getPosition()) + "\nspeed: " + ofToString(synth.getSpeed()) + "\npan:" + ofToString(synth.getPan());
	ofDrawBitmapString(tempStr, 10, ofGetHeight() - 50);

	//---------------------------------- beats:
	if (beats.isPlaying()) {
		ofSetHexColor(0xFF0000);
	} else {
		ofSetHexColor(0x000000);
	}
	font.drawString("beats !!", sectionWidth + 10, 50);

	ofSetHexColor(0x000000);
	tempStr = "click to play\nposition: " + ofToString(beats.getPosition()) + "\nspeed: " + ofToString(beats.getSpeed()) + "\npan: " + ofToString(beats.getPan());
	ofDrawBitmapString(tempStr, sectionWidth + 10, ofGetHeight() - 50);

	//---------------------------------- vocals:
	if ([vocals isPlaying]) {
		ofSetHexColor(0xFF0000);
	} else {
		ofSetHexColor(0x000000);
	}
	font.drawString("vocals !!", sectionWidth * 2 + 10, 50);

	ofSetHexColor(0x000000);
	tempStr = "click to play\nposition: " + ofToString(vocals.position) + "\nspeed: " + ofToString(vocals.speed) + "\npan: " + ofToString(vocals.pan);
	ofDrawBitmapString(tempStr, sectionWidth * 2 + 10, ofGetHeight() - 50);
}

//--------------------------------------------------------------
void ofApp::exit(){
	vocals = nil;
}

//--------------------------------------------------------------
void ofApp::touchDown(ofTouchEventArgs & touch){
	if( touch.id != 0 ){
		return;
	}

	float sectionWidth = ofGetWidth() / 3.0f;
	float speed = ofMap(touch.y, ofGetHeight(), 0, 0.5, 2.0, true);
	float pan = 0;

	if (touch.x < sectionWidth){
		pan = ofMap(touch.x, 0, sectionWidth, -1.0, 1.0, true);

		synth.play();
		synth.setSpeed(speed);
		synth.setPan(pan);

	} else if(touch.x < sectionWidth * 2) {
		pan = ofMap(touch.x, sectionWidth, sectionWidth * 2, -1.0, 1.0, true);

		beats.play();
		beats.setSpeed(speed);
		beats.setPan(pan);

	} else if(touch.x < sectionWidth * 3) {
		pan = ofMap(touch.x, sectionWidth * 2, sectionWidth * 3, -1.0, 1.0, true);

		[vocals play];
		[vocals speed:speed];
		[vocals pan:pan];
	}
}

//--------------------------------------------------------------
void ofApp::touchMoved(ofTouchEventArgs & touch){
	if( touch.id != 0 ){
		return;
	}

	float sectionWidth = ofGetWidth() / 3.0f;
	float speed = ofMap(touch.y, ofGetHeight(), 0, 0.5, 2.0, true);
	float pan = 0;

	if (touch.x < sectionWidth){
		pan = ofMap(touch.x, 0, sectionWidth, -1.0, 1.0, true);

		synth.setSpeed(speed);
		synth.setPan(pan);

	} else if(touch.x < sectionWidth * 2) {
		pan = ofMap(touch.x, sectionWidth, sectionWidth * 2, -1.0, 1.0, true);

		beats.setSpeed(speed);
		beats.setPan(pan);

	} else if(touch.x < sectionWidth * 3) {
		pan = ofMap(touch.x, sectionWidth * 2, sectionWidth * 3, -1.0, 1.0, true);

		[vocals speed:speed];
		[vocals pan:pan];
	}
}

//--------------------------------------------------------------
void ofApp::touchUp(ofTouchEventArgs & touch){

}

//--------------------------------------------------------------
void ofApp::touchDoubleTap(ofTouchEventArgs & touch){

}

//--------------------------------------------------------------
void ofApp::touchCancelled(ofTouchEventArgs & touch){

}

//--------------------------------------------------------------
void ofApp::lostFocus(){

}

//--------------------------------------------------------------
void ofApp::gotFocus(){

}

//--------------------------------------------------------------
void ofApp::gotMemoryWarning(){

}

//--------------------------------------------------------------
void ofApp::deviceOrientationChanged(int newOrientation){

}
